/**
题目:
给定一个字符串，你需要反转字符串中每个单词的字符顺序，同时仍保留空格和单词的初始顺序。
示例：
输入："Let's take LeetCode contest"
输出："s'teL ekat edoCteeL tsetnoc"
提示：
在字符串中，每个单词由单个空格分隔，并且字符串中不会有任何额外的空格。
来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/reverse-words-in-a-string-iii
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
*/
func reverseWords(s string) string {
    // left, right; 遇到空格增加temp保留位置，直到末尾
    //1.字符串转字符数组
    if len(s) < 1{
        return ""
    }
    b := []byte(s)
    var temp int
    for l,r := 0,0; l<=r && r < len(b);{
        if r+1>= len(b) || (r+1 < len(b) && b[r+1] == ' ') {
            //排除空格
            temp = r+1
            reverse(b[l:temp])
            l,r = temp +1, temp+1
        }else{
            r++
        }
    }
    return string(b)
}

//翻转字符串 TODO 是否可以直接用，而不是return
func reverse(b []byte)  {
    if len(b) <= 1{
        return
    }
    for l,r:= 0, len(b)-1; l<r; l,r = l+1, r-1 {
        b[l],b[r]=b[r],b[l]
    }
}